Cours : Inversion de priorité

1 Rappels

Définition : Ressource critique
Une ressource critique est une ressource à un seul point d'accès, c'est-à-dire accessible par un seul processus à la fois. L'utilisation s'effectue en exclusion mutuelle. L'allocation et la désallocation d'une ressource critique peuvent être gérées à l'aide d'un sémaphore R initialisé à 1. L'allocation se traduit alors par un P(R) et la restitution par un V(R).
Définition : Inversion de priorités
L'inversion de priorité est la situation pour laquelle une tâche de priorité intermédiaire (T3) s'exécute à la place d'une tâche de forte priorité (T1) parce que la tâche de forte priorité (T1) est en attente d'une ressource acquise par une tâche de plus faible priorité (T2). A priori, on ne peut pas borner le temps d'attente de la tâche de haute priorité qui risque ainsi de dépasser son échéance car l'exécution de T3 n'était pas prévisible.

Fig 1 : Exemple d'inversion de priorités

2 Solutions mises en oeuvre

Les solutions mises en œuvre ne cherchent pas à éviter le phénomène d'inversion de priorité, mais permettent seulement de borner le temps d'attente des tâches sur l'accès aux ressource s. Ces bornes B, peuvent ensuite être ajoutées au temps d'exécution des tâches et ainsi être intégrées dans les tests d'acceptation des configurations. Il existe deux protocoles principaux :
  • le protocole de l'héritage de priorité
  • le protocole de la priorité plafonnée
Ces protocoles sont mis en oeuvre de façon standard dans certains exécutifs temps réel dans les opérations P et V des sémaphores.

2.1 Le protocole de l'héritage de priorité

 
 
Principe : une tâche T détentrice d'une ressource R hérite de la priorité des tâches T' plus prioritaires mises en attente sur cette ressource R, jusqu'à ce qu'elle libère la ressource R. Ainsi T est ordonnancée au plus vite pour libérer le plus rapidement possible la ressource R. En effet, les tâches de priorité intermédiaire ne peuvent plus s'exécuter puisque leur priorité devient inférieure à celle de la tâche T.
 
 
Inconvénient : ce protocole ne prévient pas les interblocage s
Fig 2 : Protocole de l'héritage de priorités
 
 
On voit bien sur la figure 3 que l'exécution de la tâche T3 est repoussée au delà de l'exécution de T2 et T1 et ne vient plus de ce fait retarder l'exécution de T2.

2.2 Le protocole de la priorité plafonnée

 
 
Principe : Chaque ressource R possède une priorité qui est celle de la tâche de plus haute priorité pouvant demander son accès. Le principe est ensuite similaire au précédent : une tâche T détentrice d'une ressource R hérite de la priorité des tâches T' plus prioritaires mises en attente sur cette ressource R, jusqu'à ce qu'elle libère la ressource R. Ainsi T est ordonnancée au plus vite pour libérer le plus rapidement possible la ressource R Cependant, la tâche T ne peut obtenir la ressource R que si la priorité de R est strictement supérieure à celles de toutes les ressources déjà possédées par les autres tâches T''. Par ce biais, on prévient l'interblocage.
Fig 3 : Protocole de la priorité plafonnée

2.3 Evitement de l'interblocage

 
 
Nous approfondissons ici la manière dont les protocoles que nous venons de voir se com port ent vis-à-vis du problème de l'interblocage. Nous considérons deux tâches T1 et T2 telles que T1 utilise tout d'abord la ressource R1 puis la ressource R2 tandis que T2 utilise d'abord la ressource R2 depuis la ressource R1. La figure 4 décrit ce qui se passe en appliquant la protocole de l'héritage de priorité : ici la tâche T2 s'exécute et obtient la ressource R2, puis T1 s'exécute et obtient la ressource R1.T1 est ensuite bloquée lorsqu'elle demande à accéder à la ressource R2 et T2 hérite de la priorité de T1. T2 poursuit son exécution, demande à accéder à R1 et se bloque à son tour. Rien n'empêche les deux tâches de tomber en interblocage.
Fig 4 : Interblocage et Protocole de l'héritage de priorité
 
 
Observons maintenant sur la figure 5 ce qui se passe avec le protocole de la priorité plafonnée. Lorsque T1 demande à accéder à R1, la ressource ne lui est pas accordée car la priorité de R1 n'est pas supérieure à la priorité de R2, déjà possédée par T2. De cette manière, T2 poursuit son exécution en héritant de la priorité de T1, libérant au plus vite les ressource s R2 et R1. L'interblocage est évité.
Fig 5 : Interblocage et Protocole de la priorité plafonnée
Inversion de Priorité Inversion de priorité